// @ts-nocheck
/**
 * example 2
 * 验证在块级作用域中的变量提升
 * 结论：
 *      变量：
 *          变量会正常提升，和全局作用下区别不大
 *      函数：
 *          变量会提升，但是只有访问到指定块级作用域的时候，该函数才会被定义
 *
 *
 * ps： node环境下的var不会将变量挂载到global上
 *      node环境下，块级作用域中不能重复声明
 */

// 普通块级作用域中变量的提升
console.log(a); // undefined
console.log(global.b); // undefined
{
  a = 4;
  console.log(global.a, a); // undefined 4
  var a = 3;
  b = 4;
}
console.log(a); // 3
console.log(global.b, b); // 4 4

// ---------------------------------------------------
console.log("------------分割线------------");
// ---------------------------------------------------

// 验证普通块级作用域中函数的提升
console.log(global.fun, fun); // undefined undefined
{
  function fun() {}
}
console.log(global.fun, fun); // undefined [Function: fun]

// ---------------------------------------------------
console.log("------------分割线------------");
// ---------------------------------------------------

// 块级作用域下变量和函数的提升优先级
console.log(fun1); // undefined
{
  console.log(fun1);    // [Function: fun1]
  function fun1() {}
//   var fun1 = 3;     // SyntaxError: Identifier 'fun1' has already been declared
}
console.log(fun1); // [Function: fun1]
